<script>
export default {
  onLaunch: async function (options) {
    console.log('App onLaunch', options);

    // 微信审核查询
    this.$store.dispatch('wxcheckType')

    // 在这里判断 如果是单页面模式情况下, 不检查更新.
    if (wx.canIUse('getUpdateManager') && options.scene != 1154) {
      const updateManager = wx.getUpdateManager()
      console.log(updateManager);
      updateManager.onCheckForUpdate(function (res) {
        // 请求完新版本信息的回调
        //	console.log(res.hasUpdate, '请求完新版本信息的回调')
        if (res.hasUpdate) {
          updateManager.onUpdateReady(function () {
            wx.showModal({
              title: '更新提示',
              content: '新版本已经下载好，是否重启当前应用？',
              success(res) {
                if (res.confirm) {
                  updateManager.applyUpdate()
                } else if (res.cancel) {
                  uni.showModal({
                    title: '温馨提示',
                    content: '我们已经做了新的优化，请及时更新哦~',
                    showCancel: false, //隐藏取消按钮，也可显示，取消会走res.cancel，然后从新开始提示
                    success: function (res) {
                      //第二次提示后，强制更新
                      if (res.confirm) {
                        // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
                        updateManager.applyUpdate()
                      }
                    }
                  })

                }
              }
            })
          })
          updateManager.onUpdateFailed(function () {
            wx.showModal({
              title: '发现新版本',
              content: '请删除当前小程序，重启搜索打开...',
            })
          })
        }
      })
    }

    // 全局静默登录：确保任意页面进入均已具备用户信息
    try {
      await this.initSilentLogin()
      console.log('全局静默登录完成')
    } catch (e) {
      console.error('全局静默登录失败', e)
    }
  },
  onShow: async function (options) {
    console.log('App onShow', options);
    uni.setStorageSync('sceneStatus', options.scene)

    let $this = this
    //判断是否由分享进入
    if (options.scene == 1007 || options.scene == 1008 || options.scene == 1044 || options.scene == 1047) {
      $this.$store.commit('setIsSelf', false)
      console.log('首页判断是否由分享进入', this.$store.state.isSelf)
      if (options.query.cardId) {
        let cardId = options.query.cardId
        $this.$api.queryCartById({
          id: cardId
        }).then(res => {
          console.log('首页判断是否由分享进入', res);
          if (res.success) {
            $this.$store.commit('setOtherUserInfo', res.result)
            this.$store.commit('setIsSelf', false)
            console.log('首页判断是否由分享进入', this.$store.state.isSelf)
          }
        })
      }
    } else {
      $this.$store.commit('setIsSelf', true)
    }

    // 不在这里处理认证，让页面自己处理
    console.log('App onShow完成')
  },
  onHide: function () {
  },
  methods: {
    // 全局静默登录（参考 card.vue 成功逻辑）
    async initSilentLogin() {
      try {
        uni.showLoading({})
        // 读取本地 openId
        let data = uni.getStorageSync('openId')
        if (data && data.openid) {
          // 同步到 store
          this.$store.commit('setOpenId', data)
          // 使用 openId 拉取用户与供应商信息
          await this.fetchUserAndSupplier(data.openid)
          return
        }

        // 本地无 openId，调用微信登录
        await new Promise((resolve, reject) => {
          uni.login({
            provider: 'weixin',
            onlyAuthorize: true,
            success: async (loginRes) => {
              try {
                const code = loginRes.code
                const res = await this.$api.getOpenIdByCode({code})
                if (res && res.openid) {
                  console.log('res', res)
                  this.$store.commit('setOpenId', res)
                  uni.setStorageSync('openId', res)
                  await this.fetchUserAndSupplier(res.openid)
                  resolve()
                } else {
                  reject(new Error('获取openId失败'))
                }
              } catch (err) {
                reject(err)
              }
            },
            fail: (error) => reject(error)
          })
        })
      } finally {
        uni.hideLoading()
      }
    },

    // 拉取用户与供应商信息并写入 store
    async fetchUserAndSupplier(openId) {
      try {
        // 用户信息
        let userRes = await this.$api.queryCurrentCardByOpenId({openId})
        if (userRes && userRes.success && userRes.result) {
          if (!userRes.result.id) {
            //   如果没有创建用户,则调用接口创建
            let openId = uni.getStorageSync('openId')
            let params = {
              openId: openId.openid,
              unionId: openId.unionid,
            }
            console.log('没有用户,创建一个', params)
            this.$api.createUser(params).then(res => {
              if (res.success) {
                this.$store.commit('userInfo', userRes.result)
                this.$store.commit('setIsSelf', true)
              }
            })
            console.log('用户的基本信息')
          } else {
            this.$store.commit('userInfo', userRes.result)
            this.$store.commit('setIsSelf', true)
          }
        }
        // 供应商信息
        let supRes = await this.$api.querySupplyDefault({openId})
        if (supRes && supRes.success) {
          this.$store.commit('setSupplierInfo', supRes.result)
        }
      } catch (e) {
        console.error('拉取用户/供应商信息失败', e)
      }
    },

    //监听页面跳转变化
    addInterceptor() {
      let that = this
      let naviArr = ['navigateTo', 'redirectTo', 'reLaunch', 'switchTab', 'navigateBack']
      for (let i of naviArr) {
        uni.addInterceptor(i, {
          //监听跳转
          success(e) {
            that.watchRouter()
          },
        })
      }
      that.watchRouter()
    },
    // 监听页面变化改变下标
    watchRouter() {
      setTimeout(() => {
        let pages = getCurrentPages()
        if (pages.length > 0) {
          let curPage = pages[pages.length - 1]; // 当前页面
          let tabbarPages = [
            'pages/pagesMall/mallCenter/mallCenter', 'pages/activeList/activeList', 'pages/release/release',
            'pages/message/message', 'pages/user/user'
          ]
          if (tabbarPages.includes(curPage.route)) {
            this.$websocket.setTabBarBadge()
          }
        }
      }, 1000)
    }
  }
}
</script>

<style lang="scss">
/*每个页面公共css */
@import "common/css/common.css";
@import "@/uni_modules/uview-ui/index.scss";
@import "common/base.scss";
</style>
